package com.atguigu.gulimall.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 1. 整合MyBatis-Plus
 * <p>
 * 2. 逻辑删除
 * 1). 配置全局的逻辑删除规则(可省略)
 * 2). 配置逻辑删除的组件Bean(可省略)
 * 3). 给Bean加上逻辑删除注解@TableLogic
 * <p>
 * 3. JSR303
 * 1). 给Bean添加校验注解: javax.validation.constraints 定义自己的message提示
 * 2). 开启校验功能@Valid {public R save(@Valid @RequestBody BrandEntity brand)}
 * 3). 给校验的bean后紧跟一个BindingResult 可以获取到校验的结果
 * 4). 分组异常
 * ①@NotBlank(message = "品牌名不能为空", groups = {AddGroup.class, UpdateGroup.class})
 * 校验注解标注什么情况需要进行校验
 * ②{public R save(@Validated({AddGroup.class}) @RequestBody BrandEntity brand)}
 * ③默认没有指定分组的校验注解@NotBlank 在分组校验下不会生效
 * 5). 自定义校验
 * ①编写一个自定义的校验注解
 * ②编写一个自定义的校验器 ConstraintValidator
 * ③关联自定义的校验器和自定义的校验注解 @Constraint(validatedBy = {ListConstraintValidator.class 【可以指定多个不同的校验器】})
 * <p>
 * 4. 统一的异常处理
 * {@see  @ControllerAdvice}
 * <p>
 * 5. 页面修改不重启服务器实时更新
 * 引入dev-tools
 * 修改完页面 ctrl+shift+F9 重新编译当前文件
 * <p>
 * 6. 整合redis
 * 1). 引入starter
 * 2). 简单配置redis的配置信息
 * 3). 使用SpringBoot配置好的StringRedisTemplate来操作redis
 * <p>
 * 7. 整合redisson作为分布式锁等功能框架
 * 1). 引入框架
 * 2). 配置redisson
 * <p>
 * 8. 整合SpringCache简化缓存开发
 * 1). 引入依赖
 * 2). 配置
 * 2.1) 自动配置了什么
 * RedisCacheConfiguration自动配置了缓存管理器RedisCacheManager
 * 配置使用redis作为缓存
 * 3)
 * 开启缓存功能
 * {@see @EnableCaching}
 * <p>
 *
 * @author longwenchao
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableRedisHttpSession
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
